<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>nrf51/Board/nrf6310/ext_sensors/adns2080_example/main.c Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css" />
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="alias.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="alias.js"></script>

<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>


<script type="text/javascript">
  jQuery(document).ready(function () {
    if(gref){ // Number all _img and _table classes
      gref();
    }
  });
</script>

</head>
<body>
<div id="top"><!-- do not remove this div! -->

<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">nRF51 General Code Examples
   
   </div>
   
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.5 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
  initNavTree('nrf6310_2ext__sensors_2adns2080__example_2main_8c.html','');
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">nrf51/Board/nrf6310/ext_sensors/adns2080_example/main.c</div>  </div>
</div>
<div class="contents">
<a href="nrf6310_2ext__sensors_2adns2080__example_2main_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* Copyright (c) 2009 Nordic Semiconductor. All Rights Reserved.</span>
<a name="l00002"></a>00002 <span class="comment"> *</span>
<a name="l00003"></a>00003 <span class="comment"> * The information contained herein is confidential property of Nordic</span>
<a name="l00004"></a>00004 <span class="comment"> * Semiconductor ASA.Terms and conditions of usage are described in detail</span>
<a name="l00005"></a>00005 <span class="comment"> * in NORDIC SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.</span>
<a name="l00006"></a>00006 <span class="comment"> *</span>
<a name="l00007"></a>00007 <span class="comment"> * Licensees are granted free, non-transferable use of the information. NO</span>
<a name="l00008"></a>00008 <span class="comment"> * WARRANTY of ANY KIND is provided. This heading must NOT be removed from</span>
<a name="l00009"></a>00009 <span class="comment"> * the file.</span>
<a name="l00010"></a>00010 <span class="comment"> *</span>
<a name="l00011"></a>00011 <span class="comment"> */</span>
<a name="l00012"></a>00012 
<a name="l00030"></a>00030 <span class="preprocessor">#include &lt;stdbool.h&gt;</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include &lt;stdint.h&gt;</span>
<a name="l00032"></a>00032 
<a name="l00033"></a>00033 <span class="preprocessor">#include &quot;<a class="code" href="adns2080_8h.html" title="ADNS2080 mouse sensor driver.">adns2080.h</a>&quot;</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include &quot;nrf.h&quot;</span>
<a name="l00035"></a>00035 <span class="preprocessor">#include &quot;nrf_gpio.h&quot;</span>
<a name="l00036"></a>00036 <span class="preprocessor">#include &quot;nrf_gpiote.h&quot;</span>
<a name="l00037"></a>00037 
<a name="l00038"></a>00038 <span class="comment">/* File sdio_config.h contains pin configuration for SDIO clock and data. It is included by sdio.c. */</span>
<a name="l00039"></a>00039 
<a name="l00040"></a><a class="code" href="group__adns2080__example.html#gac00d3901322b185ce43c8880002d5cec">00040</a> <span class="preprocessor">#define MOTION_INTERRUPT_PIN_NUMBER (26) </span>
<a name="l00041"></a><a class="code" href="group__adns2080__example.html#gab40852b1215a406349ec1921d2d4f53a">00041</a> <span class="preprocessor">#define MOUSE_MOVEMENT_THRESHOLD (10) </span>
<a name="l00043"></a><a class="code" href="group__adns2080__example.html#ga739645fd905c0e19ec6a93609205fd5d">00043</a> <span class="preprocessor">static int16_t m_delta_x = 0; //!&lt; Variable to store mouse X-axis movement deltas</span>
<a name="l00044"></a><a class="code" href="group__adns2080__example.html#gab44d8c3d8e8c57e752ff5c17561021ef">00044</a> <span class="preprocessor"></span><span class="keyword">static</span> int16_t <a class="code" href="group__adns2080__example.html#gab44d8c3d8e8c57e752ff5c17561021ef" title="Variable to store mouse Y-axis movement deltas.">m_delta_y</a> = 0; 
<a name="l00045"></a>00045 
<a name="l00046"></a><a class="code" href="group__adns2080__example.html#ga4751f749a53b728f17460a69cf06d225">00046</a> <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">volatile</span> <a class="code" href="group__adns2080__example.html#ga4751f749a53b728f17460a69cf06d225" title="If set, motion interrupt has occurred. Clear after reading.">motion_interrupt_detected</a> = <span class="keyword">false</span>; 
<a name="l00047"></a>00047 
<a name="l00050"></a><a class="code" href="group__adns2080__example.html#gad22626704ea5d45f863163500e355cc3">00050</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__adns2080__example.html#gad22626704ea5d45f863163500e355cc3">gpiote_init</a>(<span class="keywordtype">void</span>)
<a name="l00051"></a>00051 {
<a name="l00052"></a>00052   <span class="comment">// Power ON the GPIOTE peripheral</span>
<a name="l00053"></a>00053   NRF_POWER-&gt;PERPOWER |= (POWER_PERPOWER_GPIOTE_Power &lt;&lt; POWER_PERPOWER_GPIOTE_Pos);
<a name="l00054"></a>00054 
<a name="l00055"></a>00055   <span class="comment">// Wait for the power up</span>
<a name="l00056"></a>00056   <span class="keywordflow">while</span> ( (NRF_POWER-&gt;PERRDY &amp; POWER_PERRDY_GPIOTE_Msk) != (POWER_PERRDY_GPIOTE_Ready &lt;&lt; POWER_PERRDY_GPIOTE_Pos) )
<a name="l00057"></a>00057   {
<a name="l00058"></a>00058   }
<a name="l00059"></a>00059 
<a name="l00060"></a>00060   <span class="comment">// Configure GPIOTE channel 0 to generate event when MOTION_INTERRUPT_PIN_NUMBER goes from Low to High</span>
<a name="l00061"></a>00061   <a class="code" href="group__nrf__gpiote.html#gac04dde3ea740f163fa2ac032bf56152d" title="Config GPIOTE channel as input, automatically clearing an event that appears in some cases nder confi...">nrf_gpiote_event_config</a>(0, <a class="code" href="group__adns2080__example.html#gac00d3901322b185ce43c8880002d5cec">MOTION_INTERRUPT_PIN_NUMBER</a>, <a class="code" href="group__nrf__gpiote.html#gga9a424db0997c11092f8f69d52155dd9da59dda358a841a81671bd372058b46498" title="Low to high.">NRF_GPIOTE_POLARITY_LOTOHI</a>);
<a name="l00062"></a>00062 
<a name="l00063"></a>00063   <span class="comment">// Enable interrupt for NRF_GPIOTE-&gt;EVENTS_IN[0] event</span>
<a name="l00064"></a>00064   NRF_GPIOTE-&gt;INTENSET = GPIOTE_INTENSET_IN0_Msk;
<a name="l00065"></a>00065 }
<a name="l00066"></a>00066 
<a name="l00070"></a><a class="code" href="group__adns2080__example.html#ga26b108e2296d5514a2391960b4231d71">00070</a> <span class="keywordtype">void</span> <a class="code" href="group__adns2080__example.html#ga26b108e2296d5514a2391960b4231d71">GPIOTE_IRQHandler</a>(<span class="keywordtype">void</span>)
<a name="l00071"></a>00071 {
<a name="l00072"></a>00072   <a class="code" href="group__adns2080__example.html#ga4751f749a53b728f17460a69cf06d225" title="If set, motion interrupt has occurred. Clear after reading.">motion_interrupt_detected</a> = <span class="keyword">true</span>;
<a name="l00073"></a>00073 
<a name="l00074"></a>00074   <span class="comment">// Event causing the interrupt must be cleared</span>
<a name="l00075"></a>00075   NRF_GPIOTE-&gt;EVENTS_IN[0] = 0;
<a name="l00076"></a>00076 }
<a name="l00077"></a>00077 
<a name="l00082"></a><a class="code" href="group__adns2080__example.html#ga840291bc02cba5474a4cb46a9b9566fe">00082</a> <span class="keywordtype">int</span> <a class="code" href="group__gpio__example.html#ga840291bc02cba5474a4cb46a9b9566fe">main</a>(<span class="keywordtype">void</span>)
<a name="l00083"></a>00083 {
<a name="l00084"></a>00084   <span class="comment">// Configure pins 8-15 (Port1) as outputs</span>
<a name="l00085"></a>00085   <a class="code" href="group__nrf__gpio.html#ga08c820bf0360c7406b64ddaf3bfc7222" title="Configure GPIO pin range as outputs with normal drive strength. This function can be used to configur...">nrf_gpio_range_cfg_output</a>(8, 15);
<a name="l00086"></a>00086   <a class="code" href="group__nrf__gpio.html#ga6752ee7db03061e5a3253891651c7c5e" title="Clear individual pins on GPIO port.">nrf_gpio_port_clear</a>(<a class="code" href="group__nrf__gpio.html#ggaa1a5c145e334817f2d960317d64fcb3da9209d7820d65eb58c7804e676581bf40" title="Port 1 (GPIO pin 8-15)">NRF_GPIO_PORT_SELECT_PORT1</a>, 0XFF);
<a name="l00087"></a>00087 
<a name="l00088"></a>00088   <span class="comment">// Configure motion interrupt pin</span>
<a name="l00089"></a>00089   <a class="code" href="group__nrf__gpio.html#ga4e63d442ebd572126be3e030b3df4dc6" title="Configure given GPIO pin number as input with given initial value set, hiding inner details...">nrf_gpio_cfg_input</a>(<a class="code" href="group__adns2080__example.html#gac00d3901322b185ce43c8880002d5cec">MOTION_INTERRUPT_PIN_NUMBER</a>, <a class="code" href="group__nrf__gpio.html#gga07e0c8c0b30499cf0a7b79dbe62d3fcca314d4b349d7e59ea3373a1ced4f32e4d" title="Pin pulldown resistor enabled.">NRF_GPIO_PIN_PULLDOWN</a>);
<a name="l00090"></a>00090 
<a name="l00091"></a>00091   <a class="code" href="group__adns2080__example.html#gad22626704ea5d45f863163500e355cc3">gpiote_init</a>();
<a name="l00092"></a>00092 
<a name="l00093"></a>00093   <span class="keywordflow">if</span> (<a class="code" href="group__nrf__drivers__adns2080.html#ga7abcaefa87c1e9452357ceaf16b0f367">adns2080_init</a>() != <a class="code" href="group__nrf__drivers__adns2080.html#gga657b7b313f5cd8ed57cbbf09010e86a0a36900d375db3b09dbd8c9911b2100d95">ADNS2080_OK</a>)
<a name="l00094"></a>00094   {
<a name="l00095"></a>00095     <span class="comment">// ADNS2080 init failed, set rightmost LED on</span>
<a name="l00096"></a>00096     <a class="code" href="group__nrf__gpio.html#ga7fefa8a71e25eeb57b5b4230b0dd0484" title="Write value to GPIO pin.">nrf_gpio_pin_write</a>(15, 1);
<a name="l00097"></a>00097     <span class="keywordflow">while</span> (<span class="keyword">true</span>)
<a name="l00098"></a>00098     {
<a name="l00099"></a>00099     }
<a name="l00100"></a>00100   }
<a name="l00101"></a>00101 
<a name="l00102"></a>00102   <span class="comment">// By default, adns2080 motion interrupt output is active low, edge sensitive; make it active high</span>
<a name="l00103"></a>00103   <span class="keywordflow">if</span> (<a class="code" href="group__nrf__drivers__adns2080.html#ga69ec7d764a60e9b9f518a69e7e402b24">adns2080_motion_interrupt_set</a>(<a class="code" href="group__nrf__drivers__adns2080.html#gga0a2e533ff5cb6517085859827320e103a21e1a4f8918c66c9756657f7439664df">ADNS2080_MOTION_OUTPUT_POLARITY_HIGH</a>, <a class="code" href="group__nrf__drivers__adns2080.html#ggaf829efdc343990811ba18dd86c68ef41ac914f711978a260c7db987d8130b14c6">ADNS2080_MOTION_OUTPUT_SENSITIVITY_LEVEL</a>) != <a class="code" href="group__nrf__drivers__adns2080.html#gga657b7b313f5cd8ed57cbbf09010e86a0a36900d375db3b09dbd8c9911b2100d95">ADNS2080_OK</a>)
<a name="l00104"></a>00104   {
<a name="l00105"></a>00105     <a class="code" href="group__nrf__gpio.html#ga7fefa8a71e25eeb57b5b4230b0dd0484" title="Write value to GPIO pin.">nrf_gpio_pin_write</a>(14, 1);
<a name="l00106"></a>00106     <span class="keywordflow">while</span> (<span class="keyword">true</span>)
<a name="l00107"></a>00107     {
<a name="l00108"></a>00108     }
<a name="l00109"></a>00109   }
<a name="l00110"></a>00110 
<a name="l00111"></a>00111   <span class="comment">// Read out movement to clear adns2080 interrupt flags</span>
<a name="l00112"></a>00112   <span class="keywordflow">if</span> (<a class="code" href="group__nrf__drivers__adns2080.html#ga801baebecd8050a212f8a8a51a9622b1">adns2080_is_motion_detected</a>())
<a name="l00113"></a>00113   {
<a name="l00114"></a>00114     int16_t dummy;
<a name="l00115"></a>00115     <a class="code" href="group__nrf__drivers__adns2080.html#gae6c580be751e0dd5a4e4828a36d8fcd2">adns2080_movement_read</a>(&amp;dummy, &amp;dummy);
<a name="l00116"></a>00116   }
<a name="l00117"></a>00117 
<a name="l00118"></a>00118   <span class="comment">// Enable GPIOTE interrupt in Nested Vector Interrupt Controller</span>
<a name="l00119"></a>00119   NVIC_EnableIRQ(GPIOTE_IRQn);
<a name="l00120"></a>00120 
<a name="l00121"></a>00121   <span class="comment">// Enable global interrupts</span>
<a name="l00122"></a>00122   __enable_irq();
<a name="l00123"></a>00123 
<a name="l00124"></a>00124   <span class="keywordflow">while</span>(<span class="keyword">true</span>)
<a name="l00125"></a>00125   {
<a name="l00126"></a>00126     <span class="keywordflow">if</span> (<a class="code" href="group__adns2080__example.html#ga4751f749a53b728f17460a69cf06d225" title="If set, motion interrupt has occurred. Clear after reading.">motion_interrupt_detected</a>)
<a name="l00127"></a>00127     {
<a name="l00128"></a>00128       <span class="comment">// Toggle pin 12 to indicate that we&#39;ve detected motion interrupt</span>
<a name="l00129"></a>00129       <a class="code" href="group__nrf__gpio.html#ga5c8310a3b7a81cc4a267844c81769a40" title="Toggle GPIO pin.">nrf_gpio_pin_toggle</a>(12);
<a name="l00130"></a>00130       
<a name="l00131"></a>00131       <a class="code" href="group__adns2080__example.html#ga4751f749a53b728f17460a69cf06d225" title="If set, motion interrupt has occurred. Clear after reading.">motion_interrupt_detected</a> = <span class="keyword">false</span>;
<a name="l00132"></a>00132 
<a name="l00133"></a>00133       <span class="comment">// On our Nordic reference design PCB, the chip orientation is not the same as in the ADNS2080 </span>
<a name="l00134"></a>00134       <span class="comment">// datasheet diagram, so X and Y axis are reversed. This is corrected by passing the pointer</span>
<a name="l00135"></a>00135       <span class="comment">// parameters in reversed order. */</span>
<a name="l00136"></a>00136       <a class="code" href="group__nrf__drivers__adns2080.html#gae6c580be751e0dd5a4e4828a36d8fcd2">adns2080_movement_read</a>(&amp;<a class="code" href="group__adns2080__example.html#gab44d8c3d8e8c57e752ff5c17561021ef" title="Variable to store mouse Y-axis movement deltas.">m_delta_y</a>, &amp;<a class="code" href="group__adns2080__example.html#ga739645fd905c0e19ec6a93609205fd5d" title="Variable to store mouse X-axis movement deltas.">m_delta_x</a>);
<a name="l00137"></a>00137 
<a name="l00138"></a>00138       <span class="comment">// If movement delta_x is above the threshold light up LEDs accordingly. So when mouse is moved</span>
<a name="l00139"></a>00139       <span class="comment">// left, 4 leftmost LEDs are lit and when mouse is moved right, 4 rightmost LEDs are lit</span>
<a name="l00140"></a>00140       <span class="keywordflow">if</span> (<a class="code" href="group__adns2080__example.html#ga739645fd905c0e19ec6a93609205fd5d" title="Variable to store mouse X-axis movement deltas.">m_delta_x</a> &gt; <a class="code" href="group__adns2080__example.html#gab40852b1215a406349ec1921d2d4f53a">MOUSE_MOVEMENT_THRESHOLD</a>)
<a name="l00141"></a>00141       {
<a name="l00142"></a>00142         <a class="code" href="group__nrf__gpio.html#gac1d4940bc5ad4aad4f6363c7021b08ae" title="Write GPIO port.">nrf_gpio_port_write</a>(<a class="code" href="group__nrf__gpio.html#ggaa1a5c145e334817f2d960317d64fcb3da9209d7820d65eb58c7804e676581bf40" title="Port 1 (GPIO pin 8-15)">NRF_GPIO_PORT_SELECT_PORT1</a>, 0xF0);
<a name="l00143"></a>00143       }
<a name="l00144"></a>00144       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="group__adns2080__example.html#ga739645fd905c0e19ec6a93609205fd5d" title="Variable to store mouse X-axis movement deltas.">m_delta_x</a> &lt; (-<a class="code" href="group__adns2080__example.html#gab40852b1215a406349ec1921d2d4f53a">MOUSE_MOVEMENT_THRESHOLD</a>))
<a name="l00145"></a>00145       {
<a name="l00146"></a>00146         <a class="code" href="group__nrf__gpio.html#gac1d4940bc5ad4aad4f6363c7021b08ae" title="Write GPIO port.">nrf_gpio_port_write</a>(<a class="code" href="group__nrf__gpio.html#ggaa1a5c145e334817f2d960317d64fcb3da9209d7820d65eb58c7804e676581bf40" title="Port 1 (GPIO pin 8-15)">NRF_GPIO_PORT_SELECT_PORT1</a>, 0x0F);
<a name="l00147"></a>00147       }
<a name="l00148"></a>00148       <span class="keywordflow">else</span>
<a name="l00149"></a>00149       {
<a name="l00150"></a>00150         <a class="code" href="group__nrf__gpio.html#ga6752ee7db03061e5a3253891651c7c5e" title="Clear individual pins on GPIO port.">nrf_gpio_port_clear</a>(<a class="code" href="group__nrf__gpio.html#ggaa1a5c145e334817f2d960317d64fcb3da9209d7820d65eb58c7804e676581bf40" title="Port 1 (GPIO pin 8-15)">NRF_GPIO_PORT_SELECT_PORT1</a>,  0xFF);
<a name="l00151"></a>00151       }
<a name="l00152"></a>00152     }
<a name="l00153"></a>00153   }
<a name="l00154"></a>00154 }
<a name="l00155"></a>00155 
</pre></div></div>
</div>
  <div id="nav-path" class="navpath">
    <ul>
      <li class="navelem"><a class="el" href="nrf6310_2ext__sensors_2adns2080__example_2main_8c.html">main.c</a>      </li>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Defines</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>


    <li class="footer">
      Copyright &copy 2006-2011 <a href="http://www.nordicsemi.no" style="text-decoration:none">Nordic Semiconductor</a>.
      All Rights Reserved.
      <a href="disclaimer.html">Disclaimer</a>
    </li>
   </ul>
 </div>


</body>
</html>
